#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
输入处理服务集成模块 - DeepMedical 项目

该模块负责将输入处理服务集成到后端架构中，提供异步接口以供工作流服务调用。
"""

import logging
import asyncio
from typing import Dict, List, Any, Optional

# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)

# 导入输入处理服务
try:
    # 使用相对路径导入
    # .. 代表上一级目录 (src)
    # input-service 是 src 下的包
    # src 是 input-service 下的子包
    # input_processor 是 src 子包下的模块
    from ..input_service.src.input_processor import process_input_async
    logger.info("成功使用相对路径导入输入处理服务: from ..input_service.src.input_processor import process_input_async")
except ImportError as e:
    logger.error(f"使用相对路径导入输入处理服务失败: {e}")
    logger.error("请确保项目结构正确，并且所有必要的 __init__.py 文件都存在于包目录中。")
    logger.error("例如: src/__init__.py, src/service/__init__.py, src/input-service/__init__.py, src/input-service/src/__init__.py")

    # 提供一个后备实现，以防导入失败
    async def process_input_async(user_input: str) -> Dict:
        """
        输入处理服务导入失败时的后备实现
        
        Args:
            user_input: 用户输入文本
            
        Returns:
            处理结果字典
        """
        logger.warning("使用后备输入处理实现，因为相对导入失败。")
        return {
            "raw_input": user_input,
            "status": "error",
            "message": "输入处理服务导入失败，请检查日志中的导入错误信息。",
            "intent": {"intent_class": "unknown"},
            "targets": []
        }

async def process_user_input(user_input: str) -> Dict:
    """
    处理用户输入，调用输入处理服务
    
    Args:
        user_input: 用户输入文本
        
    Returns:
        处理结果字典，包含意图分析和目标生成结果
    """
    logger.info(f"开始处理用户输入: {user_input[:50]}...")
    
    try:
        # 调用输入处理服务的异步接口
        # process_input_async 会在模块级别被定义（或者在except块中被定义为后备函数）
        result = await process_input_async(user_input)
        logger.info(f"输入处理完成，状态: {result.get('status', 'unknown')}")
        return result
    except NameError as ne:
        logger.error(f"调用 process_input_async 失败，可能由于导入错误: {ne}")
        logger.warning("由于 NameError，将使用后备输入处理实现。")
        return {
            "raw_input": user_input,
            "status": "error",
            "message": "输入处理服务未正确加载 (NameError)，请检查日志。",
            "intent": {"intent_class": "unknown"},
            "targets": []
        }
    except Exception as e:
        logger.error(f"处理用户输入时发生其他错误: {e}")
        # 返回错误结果
        return {
            "raw_input": user_input,
            "status": "error",
            "message": f"处理失败: {str(e)}",
            "intent": {"intent_class": "unknown"},
            "targets": []
        }
